
## 题目
有一个立方体房间，其长度、宽度和高度都等于 n 个单位。请你在房间里放置 n 个盒子，每个盒子都是一个单位边长的立方体。放置规则如下：

* 你可以把盒子放在地板上的任何地方。
* 如果盒子 x 需要放置在盒子 y 的顶部，那么盒子 y 竖直的四个侧面都 必须 与另一个盒子或墙相邻。
给你一个整数 n ，返回接触地面的盒子的 最少 可能数量。



示例 1：

![3-boxes.png](../../../media/pictures/leetcode/3-boxes.png)

    输入：n = 3
    输出：3
    解释：上图是 3 个盒子的摆放位置。
    这些盒子放在房间的一角，对应左侧位置。
示例 2：

![4-boxes.png](../../../media/pictures/leetcode/4-boxes.png)

    输入：n = 4
    输出：3
    解释：上图是 3 个盒子的摆放位置。
    这些盒子放在房间的一角，对应左侧位置。
示例 3：

![10-boxes.png](../../../media/pictures/leetcode/10-boxes.png)

    输入：n = 10
    输出：6
    解释：上图是 10 个盒子的摆放位置。
    这些盒子放在房间的一角，对应后方位置。


提示：

* 1 <= n <= 10<sup>9</sup>


## 思路

while

## 解法
```java
class Solution {
    public int minimumBoxes(int n) {
        int sum = 0, k = 1;
        while (sum + k * (k + 1) / 2 <= n) {
            sum += k * (k + 1) / 2;
            k++;
        }
        
        k--;
        int ans = k * (k + 1) / 2;
        k = 1;
        while (sum < n) {
            sum += k;
            k++;
            ans++;
        }
        return ans;
    }
}

```

## 总结

- 分析出几种情况，然后分别对各个情况实现 
